Caching হল একটি প্রযুক্তি যা ওয়েব অ্যাপ্লিকেশনগুলির পারফরম্যান্স উন্নত করার জন্য ব্যবহৃত হয়। এটি ওয়েব পেজ বা ডাটাবেস থেকে রিটার্ন হওয়া ডাটা দ্রুত ব্যবহারকারীর কাছে উপস্থাপন করতে সাহায্য করে, যার ফলে সার্ভারের লোড কমে এবং অ্যাপ্লিকেশন আরও দ্রুত কার্যকরী হয়। PHP এবং MySQL-এ caching টেকনিক ব্যবহার করে আমরা ডাটাবেসের অপ্রয়োজনীয় রিকোয়েস্ট কমাতে পারি এবং ডাটা রিটার্নের গতি বাড়াতে পারি।
এই টিউটোরিয়ালে আমরা বিভিন্ন caching techniques নিয়ে আলোচনা করব, যা PHP এবং MySQL ডাটাবেসের সাথে ব্যবহার করা যেতে পারে।
1. Types of Caching Techniques
PHP এবং MySQL-এ ক্যাশিংয়ের মূল কয়েকটি কৌশল রয়েছে:
- Data Caching (Database Caching)
- Object Caching
- Page Caching
- Opcode Caching
- Query Caching (MySQL-specific)
এখানে আমরা প্রতিটি কৌশল বিস্তারিতভাবে আলোচনা করব।
2. Data Caching (Database Caching)
ডাটাবেস ক্যাশিং মূলত ডাটাবেসের রিটার্ন হওয়া ডাটাকে ক্যাশে সংরক্ষণ করে, যাতে পরবর্তীতে একই ডাটার জন্য নতুন করে ডাটাবেস রিকোয়েস্ট না পাঠাতে হয়। এর ফলে ডাটাবেস রিকোয়েস্টের সংখ্যা কমে এবং অ্যাপ্লিকেশন দ্রুত কাজ করে।
2.1 File-based Caching (PHP)
ফাইল সিস্টেমে ক্যাশ সংরক্ষণ করতে PHP-তে সাধারণত serialize() এবং unserialize() ফাংশন ব্যবহার করা হয়। এখানে একটি সিম্পল উদাহরণ দেওয়া হলো:
<?php
// ক্যাশ ফাইল পাথ
$cache_file = 'cache/data_cache.txt';
// ক্যাশ ফাইল চেক করা
if (file_exists($cache_file) && time() - filemtime($cache_file) < 3600) {
// ক্যাশ থেকে ডাটা পড়া
$data = unserialize(file_get_contents($cache_file));
} else {
// ডাটাবেস থেকে ডাটা রিট্রিভ করা
$conn = new mysqli("localhost", "root", "", "test_db");
$result = $conn->query("SELECT * FROM users");
$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
// ডাটা ক্যাশে সেভ করা
file_put_contents($cache_file, serialize($data));
$conn->close();
}
echo '<pre>';
print_r($data);
echo '</pre>';
?>
এখানে:
- ডাটাবেস থেকে ডাটা রিট্রিভ করার পর সেটি ফাইল ক্যাশে সেভ করা হয়।
- ফাইলটি ক্যাশ হিসাবে ব্যবহার করা হয় এবং ১ ঘণ্টার পর এটি পুনরায় আপডেট হবে।
2.2 Memcached বা Redis (Advanced Caching)
যদি আপনার অ্যাপ্লিকেশন বড় হয় এবং আপনি আরও উন্নত ক্যাশিং সিস্টেম চাচ্ছেন, তাহলে Memcached বা Redis ব্যবহার করা উচিত। এগুলি ইন-মেমোরি ডাটা স্টোরেজ সিস্টেম, যা দ্রুত ডাটা অ্যাক্সেসের জন্য ব্যবহৃত হয়।
Memcached Example:
<?php
// Memcached কানেকশন তৈরি
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
// ক্যাশ চেক করা
$data = $memcached->get('user_data');
if ($data === FALSE) {
// ক্যাশে ডাটা না থাকলে, ডাটাবেস থেকে ডাটা রিট্রিভ করা
$conn = new mysqli("localhost", "root", "", "test_db");
$result = $conn->query("SELECT * FROM users");
$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
// ডাটা Memcached এ সেভ করা
$memcached->set('user_data', $data, 3600); // ১ ঘণ্টার জন্য ক্যাশে রাখা
$conn->close();
}
echo '<pre>';
print_r($data);
echo '</pre>';
?>
এখানে:
Memcachedব্যবহার করে ডাটা দ্রুত ক্যাশ করা হচ্ছে এবং ডাটাবেস থেকে রিট্রিভ করার আগেই ক্যাশে চেক করা হচ্ছে।
3. Object Caching
Object Caching এমন একটি কৌশল, যেখানে অ্যাপ্লিকেশন বা অবজেক্টগুলো ক্যাশে সেভ করা হয়, যাতে পুনরায় অবজেক্ট তৈরি করার জন্য ডাটাবেস বা অন্যান্য রিসোর্সের প্রয়োজন না হয়। এটি মূলত ক্লাস বা অবজেক্টের ডেটা ক্যাশ করার জন্য ব্যবহৃত হয়।
3.1 Object Caching with Memcached
<?php
// Memcached কানেকশন তৈরি
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
// ক্যাশ চেক করা
$user_object = $memcached->get('user_object');
if ($user_object === FALSE) {
// ক্যাশে না থাকলে, নতুন অবজেক্ট তৈরি
$user_object = new User();
$user_object->loadFromDatabase();
// অবজেক্ট Memcached এ সেভ করা
$memcached->set('user_object', $user_object, 3600); // ১ ঘণ্টার জন্য ক্যাশে রাখা
}
echo $user_object->getName();
?>
এখানে:
- একটি User ক্লাসের অবজেক্ট Memcached এ সেভ করা হচ্ছে, যাতে পরবর্তীতে একই অবজেক্ট পুনরায় ডাটাবেস থেকে লোড না করতে হয়।
4. Page Caching
Page Caching একটি সম্পূর্ণ ওয়েব পেজের ক্যাশিং কৌশল, যেখানে একটি পেজ সম্পূর্ণভাবে ক্যাশে সংরক্ষণ করা হয় এবং ব্যবহারকারী পরবর্তী সময় একই পেজ ভিজিট করলে ডাটাবেস থেকে রিকোয়েস্ট না করে সরাসরি ক্যাশ থেকে পেজ লোড করা হয়। এটি স্ট্যাটিক পেজের জন্য কার্যকরী, যেগুলোর কন্টেন্ট পরিবর্তিত হয় না।
4.1 PHP Page Caching Example
<?php
// ক্যাশ ফাইল পাথ
$cache_file = 'cache/page_cache.html';
// ক্যাশ ফাইল চেক করা
if (file_exists($cache_file) && time() - filemtime($cache_file) < 3600) {
// ক্যাশ ফাইল থেকে পেজ রেন্ডার করা
echo file_get_contents($cache_file);
} else {
// পেজ রেন্ডার করা
ob_start(); // Output buffering শুরু
echo "<h1>Welcome to My Website</h1>";
echo "<p>Current date: " . date('Y-m-d H:i:s') . "</p>";
// পেজ রেন্ডারিং শেষ হলে ক্যাশে সেভ করা
$content = ob_get_contents();
file_put_contents($cache_file, $content);
ob_end_flush(); // Output buffering শেষ
}
?>
এখানে:
- প্রথমে ক্যাশ ফাইল চেক করা হয়, এবং ক্যাশ ফাইল যদি ১ ঘণ্টার পুরনো না হয়, তবে ক্যাশ থেকে পেজ লোড করা হয়।
- যদি ক্যাশ ফাইল না থাকে, তবে পেজটি তৈরি করে ক্যাশে সেভ করা হয়।
5. Opcode Caching (PHP)
Opcode Caching একটি পিএইচপি ক্যাশিং কৌশল, যা স্ক্রিপ্টের অপকোডকে ক্যাশে সেভ করে, যাতে PHP স্ক্রিপ্ট প্রতিবার রেন্ডার করার প্রয়োজন না হয়। এটি OPcache এর মাধ্যমে সহজেই করতে পারেন।
5.1 OPcache Enable করা
<?php
// OPcache ইনফো দেখানো
phpinfo();
?>
এখানে:
- যদি OPcache সক্রিয় থাকে, আপনি
phpinfo()ফাংশন ব্যবহার করে এর তথ্য দেখতে পারবেন। - OPcache কনফিগারেশন ফাইল (php.ini) এ সক্রিয় করতে হয় এবং এটি স্ক্রিপ্টের পারফরম্যান্স দ্রুত করতে সহায়তা করে।
6. MySQL Query Caching
MySQL নিজস্ব query cache সিস্টেম সরবরাহ করে, যা ডাটাবেসের পুনরাবৃত্তি কুয়েরি রেসপন্স ক্যাশে সংরক্ষণ করে।
6.1 MySQL Query Caching Enabling
SET GLOBAL query_cache_size = 1048576; -- Enable query cache
SET GLOBAL query_cache_type = 1; -- Enable caching for SELECT queries
এখানে:
query_cache_sizeদিয়ে ক্যাশের সাইজ নির্ধারণ করা হয়।query_cache_typeদিয়ে কেবল SELECT কুয়েরির জন্য ক্যাশিং সক্রিয় করা হয়।
সারাংশ
Caching PHP এবং MySQL-
Read more